package com.zm.oes.serviceimpl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.mapper.AnswerMapper;
import com.zm.oes.service.AnswerService;
import com.zm.oes.vo.AnswerVO;
import com.zm.oes.vo.QuestionVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AnswerServiceImpl implements AnswerService {

    @Autowired
    private AnswerMapper answerMapper;

    /**
     * 用于查询所有答案信息   返回一个 IPage<AnswerVO> 对象，接受四个参数：page 是分页信息，subject、section 和 question 是查询条件
     */
    @Override
    public IPage<AnswerVO> findAll(Page<AnswerVO> page, String subject, String section, String question) {
        /**
         * 对传入的查询条件进行处理，如果条件值为 "@"，则将其置为空字符串，否则保留原值
         * 此处为了允许用户在不提供特定条件的情况下执行查询，即查询所有答案信息
         */
        subject = (subject.equals("@") ? "" : subject);
        section = (section.equals("@") ? "" : section);
        question = (question.equals("@") ? "" : question);
        return answerMapper.findAll(page, subject, section, question);
    }

    /**
     * 根据题目类型和题目ID查询题目信息   返回一个 QuestionVO 对象，接受两个参数：type 是题目类型，questionId 是题目ID
     */
    @Override
    public QuestionVO findByIdAndType(String type, Long questionId) {
        //创建一个 QuestionVO 对象，并设置其类型为传入的 type
        QuestionVO questionVO = new QuestionVO();
        questionVO.setType(type);
        /**
         * 根据传入的题目类型，在 switch 语句中进行不同的处理
         * 如果题目类型是 "选择题"，则调用 answerMapper 的 findMultiQuestionById 方法查询对应题目ID的选择题信息，并设置到 QuestionVO 对象中的 multiQuestion 属性
         */
        switch (type) {
            case "选择题":
                questionVO.setMultiQuestion(answerMapper.findMultiQuestionById(questionId));
                break;
            case "判断题":
                questionVO.setJudgeQuestion(answerMapper.findJudgeQuestionById(questionId));
                break;
            case "填空题":
                questionVO.setFillQuestion(answerMapper.findFillQuestionById(questionId));
                break;
        }
        return questionVO;
    }
}
